package com.ldp.designpatterns.study.observer.subject;

import com.ldp.designpatterns.study.observer.observer.Observer;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName ConcreteSubject TODO: 第3步,实现具体的主题类
 * @Description TODO 观察者模式 一个对象（目标对象）的状态发生改变，所有的依赖对象（观察者对象）都将得到通知，进行广播通知。
 * @Author lindipei
 * @Date 2023/10/18 11:32
 */
public class ConcreteSubject implements Subject{

    private List<Observer> observers = new ArrayList<>();
    private int state;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }

    @Override
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }
}
